import {
    createAGroupFolder,
    getGroupPlayerList,
    getPlayerData,
    isGroupExist,
    isPlayerExist,
    readConfiguration,
    storagePlayerData
} from '../function/function.js';

export class Bs extends plugin {
    constructor() {
        super({
            name: '[Bs]面包记录',
            dsc: '面包记录',
            event: 'message',
            priority: 1,
            rule: [
                { reg: /^[#\/](.*)记录(买|[吃啃]|抢|(赠)?送|猜拳|赌)?$/, fnc: 'breadRecord' }
            ]
        })
    }

    async breadRecord(e) {
        // 非群无法游玩
        if (!e.isGroup) return false
        /** ID [群, 用户, 指定用户] */
        const ID = [e.group_id, e.user_id, e.at]
        /** 用户输入内容 */
        const [, USER_INPUT_CONTENT, OPERATION] = e.msg.match(/^[#\/](.*)记录(买|[吃啃]|抢|(赠)?送|猜拳|赌)?$/)
        /** 配置数据 */
        const configData = await readConfiguration()
        /** 默认物品 */
        let defaultItem = configData['bread_thing']
        /** 自定义物品 */
        const CUSTOM_ITEMS = configData['special_thing_group'][ID[0]]

        // 判断执行条件 [不存在自定义物品 同时 用户输入内容不为默认物品] 或者 [存在自定义物品 同时 用户输入内容不为自定义物品]
        if (!CUSTOM_ITEMS && USER_INPUT_CONTENT !== defaultItem || CUSTOM_ITEMS && USER_INPUT_CONTENT !== CUSTOM_ITEMS) return false
        // 存在自定义物品 默认物品修改为自定义物品
        if (CUSTOM_ITEMS) {
            defaultItem = CUSTOM_ITEMS
        }

        // 判断是否有此群文件夹，没有则创建
        if (!isGroupExist(ID[0])) { createAGroupFolder(ID[0]) }

        // 判断是否存在该用户，没有则创建基础信息
        if (!isPlayerExist(ID[0], ID[1])) {
            storagePlayerData(ID[0], ID[1], {
                name: e.sender.card || '未设置面包昵称',
                lv: 0,
                xp: 0,
                number: 0,
                cd: { buy: 0, eat: 0, rob: 0, give: 0, bet: 0 },
                log: { buy: [], eat: [], rob: [], give: [], bet: [] }
            })
        }

        /** 返回消息 */
        let msg

        // 判断查看类型
        if (!OPERATION) { // 无指定操作 看所有操作记录
            if (!ID[2]) { // 看自己
                /** 用户数据 */
                const USER_DATA = await getPlayerData(ID[0], ID[1])

                msg = [
                    `你的${defaultItem}记录`,
                    `你共购买${USER_DATA['log']['buy'].length}次`,
                    `吃${USER_DATA['log']['eat'].length}次`,
                    `抢${USER_DATA['log']['rob'].length}次`,
                    `赠送${USER_DATA['log']['give'].length}次`,
                    `猜拳${USER_DATA['log']['bet'].length}次！`
                ]

                return e.reply([msg.join('\r')], true)
            } else { // 看别人
                // 判断是否存在该用户
                if (!isPlayerExist(ID[0], ID[1])) return e.reply([`没有该用户的${defaultItem}数据呢`])

                /** 用户数据 */
                const USER_DATA = await getPlayerData(ID[0], ID[2])

                msg = [
                    `[${USER_DATA['name']}]的${defaultItem}记录`,
                    `你共购买${USER_DATA['log']['buy'].length}次`,
                    `吃${USER_DATA['log']['eat'].length}次`,
                    `抢${USER_DATA['log']['rob'].length}次`,
                    `赠送${USER_DATA['log']['give'].length}次`,
                    `猜拳${USER_DATA['log']['bet'].length}次！`
                ]

                return e.reply([msg.join('\r')], true)
            }
        } else { // 看指定操作最多人
            /** 查看操作类型 */
            let operationType
            /** 夸赞 */
            let praise

            // 判断操作类型
            if (OPERATION === '买') { operationType = 'buy'; praise = '哇好有钱！' }
            if (OPERATION === '吃' || OPERATION === '啃') { operationType = 'eat'; praise = '好能吃，大胃王！' }
            if (OPERATION === '抢') { operationType = 'rob'; praise = '大坏比！' }
            if (OPERATION === '赠送' || OPERATION === '送') { operationType = 'give'; praise = '我超，大好人！' }
            if (OPERATION === '猜拳' || OPERATION === '赌') { operationType = 'bet'; praise = '哇塞，赌狗！' }

            /** 该群的玩家列表 */
            const GROUP_USER_LIST = getGroupPlayerList(ID[0])

            /** 玩家操作数据 */
            let operationData = []
            for (let i = 0; i < GROUP_USER_LIST.length; i++) {
                /** 用户ID */
                const USER_ID = GROUP_USER_LIST[i].replace(/.json/g, '')
                /** 用户数据 */
                const USER_DATA = await getPlayerData(ID[0], USER_ID)

                // 写入
                operationData.push({
                    name: USER_DATA['name'],
                    typy: operationType,
                    number: USER_DATA['log'][operationType].length
                })
            }
            operationData.sort((a, b) => b.number - a.number)

            msg = `${OPERATION}次数最多是[${operationData[0]['name']}]！共${operationData[0]['number']}次，` + praise

            return e.reply([msg])
        }
    }
}